AWS IAM の信頼関係のプリンシパルに AWS アカウントを指定した際に作成や更新ができない場合の対処
こんにちは、CX 事業本部製造ビジネステクノロジー部の若槻です。
AWS IAM のロールやポリシーでは、信頼関係のプリンシパルに AWS アカウントを指定することができます。これにより AWS アカウントによるアクセス制御を行うことができます。
今回は、この IAM ロールやポリシーの信頼関係のプリンシパルに AWS アカウントを指定した際にエラーが発生する場合の対処について確認をしました。
事象
IAM ロールの作成時
マネジメントコンソールから IAM ロールを作成しようとすると、以下のようにエラーが発生します。
Failed to create role test-20240115-role.
Invalid principal in policy: "AWS":"123456789012"
IAM ロールの更新時
マネジメントコンソールから IAM ロールを更新しようとすると、以下のようにエラーが発生します。
Failed to update trust policy.
Invalid principal in policy: "AWS":"arn:aws:iam::123456789012:root"
S3 バケットポリシーの更新時
マネジメントコンソールから S3 バケットポリシーを更新しようとすると、以下のようにエラーが発生します。
Unknown Error
An unexpected error occurred.API response
Invalid principal in policy
AWS CDK での IAM ロールの作成時
AWA CDK で次のような定義で IAM ロールを作成しようとしました。
import { aws_iam, Stack } from 'aws-cdk-lib'; import { Construct } from 'constructs'; export class CdkSampleStack extends Stack { constructor(scope: Construct, id: string) { super(scope, id); new aws_iam.Role(this, 'Role', { assumedBy: new aws_iam.AccountPrincipal('123456789012'), }); } }
しかし CDK デプロイを行うと、以下のようにエラーが発生します。
$ cdk deploy ✨ Synthesis time: 2.72s CdkSampleStack: start: Building 806f25da605f1e107b3216e1ffa2cd6934a7663a29c983364edff48c2769ad1e:current_account-current_region CdkSampleStack: success: Built 806f25da605f1e107b3216e1ffa2cd6934a7663a29c983364edff48c2769ad1e:current_account-current_region CdkSampleStack: start: Publishing 806f25da605f1e107b3216e1ffa2cd6934a7663a29c983364edff48c2769ad1e:current_account-current_region CdkSampleStack: success: Published 806f25da605f1e107b3216e1ffa2cd6934a7663a29c983364edff48c2769ad1e:current_account-current_region CdkSampleStack: deploying... [1/1] CdkSampleStack: updating stack... 2:51:41 AM | UPDATE_FAILED | AWS::IAM::Role | Role1ABCC5F0 Resource handler returned message: "Invalid principal in policy: "AWS":"arn:aws:iam::123456789012:root" (Servi ce: Iam, Status Code: 400, Request ID: 8b5f8d1b-f3be-4782-9dee-13071ca246d5)" (RequestToken: b8083695-ac6c-905 b-d94b-e141c71058cf, HandlerErrorCode: InvalidRequest)
原因
エラーの原因は、プリンシパルに存在しない AWS アカウント ID を指定していたためでした。
存在しているアカウントを指定すると、エラーとならずに作成することができました。
おわりに
AWS IAM の信頼関係のプリンシパルに AWS アカウントを指定した際に作成や更新ができない場合の対処について確認してみました。
存在しないアカウントを意図的もしくは入力ミスにより指定していた場合に発生するエラーでした。同様のエラーが発生した場合は正しい AWS アカウントが指定されているか確認するようにしましょう。
もしくは、本仕様を利用して AWS アカウント ID の存在確認を行うこともできるでしょう。ユースケースはあまり思いつきませんが。
以上